package com.mac.web;

import com.alibaba.fastjson.JSON;
import com.mac.pojo.Collaborations;
import com.mac.service.CollaborationsService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;

/**
 * 处理合作相关信息的Servlet。
 * @author 张舜 独家创作
 * version 1.0
 */
@WebServlet("/collaborationsServlet/*")
public class CollaborationsServlet extends BaseServlet {
    // 使用SLF4J记录日志
    private static final Logger LOGGER = LoggerFactory.getLogger("CollaborationsServlet.Class");
    // 注入合作信息服务类，用于与合作信息数据交互
    CollaborationsService collaborations = new CollaborationsService();

    /**
     * 获取所有合作信息的方法。
     * @param req 请求对象，包含请求信息。
     * @param res 响应对象，用于返回响应数据。
     * @throws IOException 如果发生I/O异常。
     */
    public void selectAllCollaborations(HttpServletRequest req, HttpServletResponse res) throws IOException {
        // 初始化合作信息列表，用于存储所有合作信息数据
        ArrayList<Collaborations> collaborationsArrayList;
        try {
            // 调用合作信息服务方法，获取所有合作信息
            collaborationsArrayList = collaborations.selectAllCollaborations();
            LOGGER.info("collaborations.selectAllCollaborations() -> succeed");
        } catch (Exception e) {
            // 记录错误并返回错误消息
            LOGGER.error("collaborations.selectAllCollaborations() -> failed", e);
            res.getWriter().write("SAR_ERROR");
            return;
        }

        // 将合作信息列表转换为JSON格式
        String jsonString = JSON.toJSONString(collaborationsArrayList);

        // 设置响应内容类型并写入JSON字符串
        res.setContentType("text/json;charset=utf-8");
        res.getWriter().write(jsonString);
    }

    /**
     * 根据合作信息ID获取单个合作信息的方法。
     * @param req 请求对象，包含请求信息。
     * @param res 响应对象，用于返回响应数据。
     * @throws IOException 如果发生I/O异常。
     */
    public void selectOneBycollaborationId(HttpServletRequest req, HttpServletResponse res) throws IOException {
        // 从请求参数中获取合作信息ID
        String collaboration_id = req.getParameter("collaboration_id");

        // 将合作信息ID转换为整数
        int collaborationId = Integer.parseInt(collaboration_id);

        // 初始化合作信息对象，用于存储查询结果
        Collaborations collaboration;
        try {
            // 调用合作信息服务方法，根据ID查询单个合作信息
            collaboration = collaborations.selectOneBycollaborationId(collaborationId);
            LOGGER.info("collaborations.selectOneBycollaborationId(collaboration_id) -> succeed");
        } catch (Exception e) {
            // 记录错误并返回错误消息
            LOGGER.error("collaborations.selectOneBycollaborationId(collaboration_id) -> failed", e);
            res.getWriter().write("SAR_ERROR");
            return;
        }

        // 将合作信息转换为JSON格式
        String jsonString = JSON.toJSONString(collaboration);

        // 设置响应内容类型并写入JSON字符串
        res.setContentType("text/json;charset=utf-8");
        res.getWriter().write(jsonString);
    }
}